@echo off
:: 设置命令行编码为UTF-8
chcp 65001 >nul
setlocal enabledelayedexpansion

echo ========================================
echo    前端打包脚本 - 打包Vue项目为NW.js应用
echo ========================================

:: 设置工作目录变量
set "ROOT_DIR=%cd%"
set "FRONTEND_DIR=%ROOT_DIR%\frontend"
set "DIST_DIR=%ROOT_DIR%\dist-frontend"

:: 检查前端目录是否存在
if not exist "%FRONTEND_DIR%" (
  echo 错误: 前端目录 %FRONTEND_DIR% 不存在，请确保目录结构正确。
  exit /b 1
)

:: 检查Node.js环境
echo 正在检查Node.js环境...
node -v >nul 2>&1
if %errorlevel% neq 0 (
  echo 错误: 未检测到Node.js环境，请安装Node.js 12或更高版本。
  exit /b 1
)

:: 检查npm环境
echo 正在检查npm环境...
npm -v >nul 2>&1
if %errorlevel% neq 0 (
  echo 错误: 未检测到npm环境，请确保npm已正确安装。
  exit /b 1
)

:: 创建发布目录
echo 正在创建发布目录...
if exist "%DIST_DIR%" rmdir /s /q "%DIST_DIR%"
mkdir "%DIST_DIR%"

:: 检查favicon.ico文件
echo 正在检查图标文件...
if not exist "%FRONTEND_DIR%\public\favicon.ico" (
  echo 警告: 未找到图标文件 %FRONTEND_DIR%\public\favicon.ico
  echo 将创建一个简单的默认图标...
  
  :: 创建public目录
  if not exist "%FRONTEND_DIR%\public" (
    mkdir "%FRONTEND_DIR%\public"
  )
  
  :: 使用PowerShell创建一个简单的图标文件（实际应用中建议使用真实的图标）
  powershell -Command "$source = [System.Drawing.Icon]::ExtractAssociatedIcon('C:\Windows\System32\cmd.exe'); $bitmap = $source.ToBitmap(); $bitmap.Save('%FRONTEND_DIR%\public\favicon.ico')" 2>nul
  
  if %errorlevel% neq 0 (
    echo 警告: 无法创建默认图标，尝试复制系统图标...
    copy C:\Windows\System32\cmd.exe "%FRONTEND_DIR%\public\favicon.ico" >nul 2>&1
    if %errorlevel% neq 0 (
      echo 警告: 无法创建默认图标，可能会影响应用图标显示。
    ) else (
      echo 已复制系统图标文件。
    )
  ) else (
    echo 已创建默认图标文件。
  )
)

:: 检查ESLint配置文件
echo 正在检查ESLint配置...
if not exist "%FRONTEND_DIR%\.eslintrc.js" (
  echo 警告: 未找到ESLint配置文件，将创建一个基本配置...
  
  echo module.exports = { > "%FRONTEND_DIR%\.eslintrc.js"
  echo   root: true, >> "%FRONTEND_DIR%\.eslintrc.js"
  echo   env: { >> "%FRONTEND_DIR%\.eslintrc.js"
  echo     node: true >> "%FRONTEND_DIR%\.eslintrc.js"
  echo   }, >> "%FRONTEND_DIR%\.eslintrc.js"
  echo   extends: [ >> "%FRONTEND_DIR%\.eslintrc.js"
  echo     'plugin:vue/essential', >> "%FRONTEND_DIR%\.eslintrc.js"
  echo     'eslint:recommended' >> "%FRONTEND_DIR%\.eslintrc.js"
  echo   ], >> "%FRONTEND_DIR%\.eslintrc.js"
  echo   parserOptions: { >> "%FRONTEND_DIR%\.eslintrc.js"
  echo     parser: 'babel-eslint' >> "%FRONTEND_DIR%\.eslintrc.js"
  echo   }, >> "%FRONTEND_DIR%\.eslintrc.js"
  echo   rules: { >> "%FRONTEND_DIR%\.eslintrc.js"
  echo     'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', >> "%FRONTEND_DIR%\.eslintrc.js"
  echo     'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', >> "%FRONTEND_DIR%\.eslintrc.js"
  echo     'no-unused-vars': 'off', >> "%FRONTEND_DIR%\.eslintrc.js"
  echo     'vue/no-unused-components': 'off' >> "%FRONTEND_DIR%\.eslintrc.js"
  echo   } >> "%FRONTEND_DIR%\.eslintrc.js"
  echo } >> "%FRONTEND_DIR%\.eslintrc.js"
  
  echo 已创建ESLint配置文件。
)

:: 安装前端依赖
echo 正在安装前端依赖...
cd "%FRONTEND_DIR%"

:: 检查package.json文件
if not exist "package.json" (
  echo 错误: package.json文件不存在，无法安装依赖。
  exit /b 1
)

:: 检查nw-builder.js文件
if not exist "nw-builder.js" (
  echo 错误: nw-builder.js文件不存在，无法进行NW.js打包。
  exit /b 1
)

call npm install
if %errorlevel% neq 0 (
  echo 错误: 前端依赖安装失败。
  echo 尝试使用--force选项强制安装...
  call npm install --force
  if %errorlevel% neq 0 (
    echo 错误: 即使使用--force选项，依赖安装仍然失败。
    exit /b 1
  ) else (
    echo 使用--force选项成功安装依赖。
  )
) else (
  echo 依赖安装成功。
)

:: 构建前端项目
echo 正在构建前端项目...

:: 尝试禁用代码检查进行构建
echo 尝试跳过代码检查进行构建...
call npm run build -- --skip-plugins eslint

if %errorlevel% neq 0 (
  echo 尝试第二种构建方法...
  call npx vue-cli-service build --mode production --no-clean
  
  if %errorlevel% neq 0 (
    echo 尝试第三种构建方法...
    set VUE_CLI_BABEL_TRANSPILE_MODULES=true
    call npx vue-cli-service build --no-clean
    
    if %errorlevel% neq 0 (
      echo 错误: 三种构建方法都失败，无法构建前端项目。
      exit /b 1
    ) else (
      echo 成功使用第三种方法构建。
    )
  ) else (
    echo 成功使用第二种方法构建。
  )
) else (
  echo 成功使用第一种方法构建。
)

:: 检查dist目录
if not exist "dist" (
  echo 错误: 构建后的dist目录不存在，构建可能没有正确完成。
  exit /b 1
)

:: 复制package.json和nw-builder.js到dist目录
echo 正在复制打包所需文件...
copy "package.json" "dist\package.json"
if %errorlevel% neq 0 (
  echo 错误: 无法复制package.json文件到dist目录。
  exit /b 1
)

copy "nw-builder.js" "dist\nw-builder.js"
if %errorlevel% neq 0 (
  echo 错误: 无法复制nw-builder.js文件到dist目录。
  exit /b 1
)

:: 打包NW.js应用
echo 正在打包为桌面应用...
cd "dist"
call node nw-builder.js
if %errorlevel% neq 0 (
  echo 错误: NW.js打包失败。
  exit /b 1
) else (
  echo NW.js打包成功。
)

:: 检查打包结果
if not exist "build\im-chat-client\win64" (
  echo 错误: 打包后的目录结构不正确，可能打包过程出现问题。
  exit /b 1
)

:: 复制NW.js打包结果到发布目录
echo 正在复制前端文件到发布目录...
xcopy "build\im-chat-client\win64\*" "%DIST_DIR%\" /E /I /Y
if %errorlevel% neq 0 (
  echo 错误: 无法复制打包结果到发布目录。
  exit /b 1
) else (
  echo 文件复制成功。
)

:: 检查exe文件是否存在
if not exist "%DIST_DIR%\im-chat-client.exe" (
  echo 错误: 最终的可执行文件不存在，打包过程可能出现问题。
  exit /b 1
)

:: 创建启动客户端的脚本
echo 正在创建启动脚本...
echo @echo off > "%DIST_DIR%\start-client.bat"
echo chcp 65001 ^>nul >> "%DIST_DIR%\start-client.bat"
echo echo 正在启动局域网IM聊天客户端... >> "%DIST_DIR%\start-client.bat"
echo start im-chat-client.exe >> "%DIST_DIR%\start-client.bat"

echo =========================================
echo 打包完成！前端可执行文件在 %DIST_DIR% 目录下
echo 运行 start-client.bat 或直接运行 im-chat-client.exe 启动客户端
echo =========================================

:: 返回到原始目录
cd "%ROOT_DIR%"

endlocal 